
let executor = function( resolve , reject ){
    // setTimeout 产生宏任务(宏任务会被添加到宏任务队列中)
    setTimeout( function(){
        console.log( 'before resolve' );
        // 当前宏任务导致 Promise实例 状态发生改变
        // 因此当前宏任务执行结束后，才会执行 promise.then 参数中的函数
        resolve( '兑现' );
        console.log( 'after resolve' );
    } , 3000 );
}

let onFulfilled = value => {
    console.log( 'fulfilled: ' , value );
}

let onRejected = reason => {
    console.log( 'rejected: ' , reason );
}

function invoke(){
    // 创建 Promise实例
    let p = new Promise( executor ); // 同步调用
    console.log( 'promise(new): ');

    // 调用 then 函数
    p = p.then( onFulfilled , onRejected ); // 同步调用
    console.log( 'promise(then): ');
}

console.log( 'before invoke' );
invoke(); // 同步调用 invoke 导致 invoke 进入到 Call Stack
console.log( 'after invoke' );